home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 140 / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan).7z / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan) (Track 1).bin / tools / xpicw / xpicw110.lzh / WLSource / up.s < prev    next >
Encoding:
Text File  |  1997-04-10  |  2.4 KB  |  154 lines

  1. *    up.s
  2. *        上スクロール / 最高速 = 5
  3. *            by Mitsuky
  4.  
  5.  
  6. SPEED_MAX    equ    5
  7.  
  8.     .offset    8        * 引き数
  9. _source_ptr:    .ds.l    1
  10. _dest_ptr:    .ds.l    1
  11. _speed:        .ds.l    1
  12. _vdisp:        .ds.l    1
  13.  
  14.  
  15.  
  16. CRTC_R12    equ    $e8_0018    * スクロールX
  17. CRTC_R14    equ    $e8_001c
  18. CRTC_R16    equ    $e8_0020
  19. CRTC_R18    equ    $e8_0024
  20.  
  21. TRANS32    .macro    num        * 32 バイト転送マクロ
  22.     movem.l    num(a3),d0-d3/a0-a2/a5
  23.     movem.l    d0-d3/a0-a2/a5,-(a4)
  24.     .endm
  25.  
  26.  
  27.     .text
  28.     .even
  29.  
  30.     .dc.b    'WL10',$0d,$0a
  31.     .dc.b    '上スクロール / 最高速 = 5',$0d,$0a
  32.     .dc.b    '    by Mitsuky',$0d,$0a
  33.     .dc.b    $1a
  34.     .even
  35.  
  36. up:
  37.     link    a6,#0
  38.     movem.l    d1-d7/a0-a5,-(sp)
  39.  
  40.     move.l    _speed(a6),d0    * d0.w =
  41.     bmi    up_ask_speed
  42.     cmpi.l    #SPEED_MAX,d0
  43.     bhi    up_err
  44.  
  45.     tst.l    _vdisp(a6)
  46.     bmi    up_ask_vdisp
  47.  
  48.  
  49.  
  50.     moveq.l    #1,d5
  51.     lsl.w    d0,d5
  52.     move.l    #512,d7
  53.     sub.w    d5,d7        * d7.l = スクロール座標
  54.     subq.w    #1,d5        * d5.w = V-SYNC 当たりのループ回数-1
  55.  
  56.     move.w    #512,d6
  57.     lsr.w    d0,d6
  58.     subq.w    #1,d6        * d6.w = ループ回数-1
  59.  
  60.     movea.l    _source_ptr(a6),a3
  61.     movea.l    _dest_ptr(a6),a4
  62.     adda.l    #512*512*2-32,a3    * a3.l = 転送元アドレス
  63.     adda.l    #512*512*2,a4        * a4.l = 転送先アドレス
  64.  
  65.  
  66. loop:
  67.     bsr    vdisp
  68.  
  69.     move.l    d7,CRTC_R12
  70.     move.l    d7,CRTC_R14
  71.     move.l    d7,CRTC_R16
  72.     move.l    d7,CRTC_R18
  73.  
  74.     move.w    d5,d4        * d5.w =
  75. loop_y2:
  76.     TRANS32    0        * HAS ver3.x なら 0(a3) は (a3) に最適化される
  77.     TRANS32    -32*1
  78.     TRANS32    -32*2        * 上スクロールは速度的に一番厳しいので
  79.     TRANS32    -32*3        * ループ展開
  80.     TRANS32    -32*4
  81.     TRANS32    -32*5
  82.     TRANS32    -32*6
  83.     TRANS32    -32*7
  84.     TRANS32    -32*8
  85.     TRANS32    -32*9
  86.     TRANS32    -32*10
  87.     TRANS32    -32*11
  88.     TRANS32    -32*12
  89.     TRANS32    -32*13
  90.     TRANS32    -32*14
  91.     TRANS32    -32*15
  92.     TRANS32    -32*16
  93.     TRANS32    -32*17
  94.     TRANS32    -32*18
  95.     TRANS32    -32*19
  96.     TRANS32    -32*20
  97.     TRANS32    -32*21
  98.     TRANS32    -32*22
  99.     TRANS32    -32*23
  100.     TRANS32    -32*24
  101.     TRANS32    -32*25
  102.     TRANS32    -32*26
  103.     TRANS32    -32*27
  104.     TRANS32    -32*28
  105.     TRANS32    -32*29
  106.     TRANS32    -32*30
  107.     TRANS32    -32*31
  108.  
  109.     subq.w    #1,d7
  110.     lea.l    -1024(a3),a3
  111.     dbra    d4,loop_y2
  112.     dbra    d6,loop
  113.  
  114.  
  115. up_rts:
  116.     moveq.l    #0,d0
  117. up_rts_2:
  118.     movem.l    (sp)+,d1-d7/a0-a5
  119.     unlk    a6
  120.     rts
  121.  
  122.  
  123. ****    ****
  124. vdisp:
  125.     movem.l    a0,-(sp)
  126.     move.l    _vdisp(a6),a0
  127.     jsr    (a0)
  128.     movem.l    (sp)+,a0
  129.     rts
  130.  
  131.  
  132. ****    ****
  133. up_err:
  134.     moveq.l    #-1,d0
  135.     bra    up_rts_2
  136.  
  137.  
  138. ****    ****
  139. up_ask_speed:
  140.     moveq.l    #SPEED_MAX,d0
  141.     bra    up_rts_2
  142.  
  143.  
  144. ****    ****
  145. up_ask_vdisp:
  146.     move.l    _speed(a6),d0
  147.     lea.l    ask_vdisp_table(pc),a0
  148.     add.w    d0,d0
  149.     move.w    (a0,d0.w),d0
  150.     bra    up_rts_2
  151.  
  152. ask_vdisp_table:
  153.     .dc.w    512,256,128,64,32,16
  154.